package com.skycong.hello77.util;


/**
 * @author CreateBy RMC
 * 统一返回结果集对象
 */
public class Result {


    /**
     * 状态码 <br>
     * 200 成功 <br>
     * 400 错误 <br>
     * <p>
     * 100 未知错误
     */
    private Integer status;
    //    信息摘要
    private String msg;
    //    数据
    private Object data;

    private static final String DEFAULT_SUCCESS_MSG = "OK";
    private static final String DEFAULT_ERROR_MSG = "ERROR";


    /**
     * 返回 success 对象，默认消息为 OK
     *
     * @return {200，OK，null}
     */
    public static Result success() {
        return success(DEFAULT_SUCCESS_MSG);
    }

    /**
     * 返回带有 data的success 对象，默认消息为 OK
     *
     * @param data data
     * @return {200，OK，data}
     */
    public static Result success(Object data) {
        return success(DEFAULT_SUCCESS_MSG, data);
    }

    /**
     * 返回带有 message 的success 对象，
     *
     * @param message message
     * @return {200，message，null}
     */
    public static Result success(String message) {
        return success(message, null);
    }

    /**
     * 返回构造的 message 和 data success对象
     *
     * @param message
     * @param data
     * @return {200，message，data}
     */
    public static Result success(String message, Object data) {
        Result result = new Result();
        result.setStatus(200);
        result.setMsg(message);
        result.setData(data);
        return result;
    }


    /**
     * 返回error对象，默认message为 ERROR
     *
     * @return {400，ERROR，null}
     */
    public static Result error() {
        return error(DEFAULT_ERROR_MSG);
    }

    /**
     * 返回带 message 的error对象
     *
     * @param message
     * @return {400，message，null}
     */
    public static Result error(String message) {
        return error(message, null);
    }

    /**
     * 返回带有构造的message 和 data error对象
     *
     * @param message
     * @param data
     * @return {400，message，data}
     */
    public static Result error(String message, Object data) {
        Result result = new Result();
        result.setStatus(400);
        result.setMsg(message);
        result.setData(data);
        return result;
    }


    /**
     * 返回自定义的 result 对象
     *
     * @param state   状态码
     * @param message
     * @param data
     * @return {state，message，data}
     */
    public static Result builder(Integer state, String message, Object data) {
        Result result = new Result();
        result.setStatus(state);
        result.setMsg(message);
        result.setData(data);
        return result;
    }

    /**
     * 状态码 <br>
     * 200 成功 <br>
     * 400 错误 <br>
     * <p>
     * 100 未知错误
     */
    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }


    @Override
    public String toString() {
        return "Result{" +
                "status=" + status +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }
}
